package 文件io;
import java.nio.file.*;
import java.io.*;

public class 新ioPath类
{
	public static void main(String[]args){
		File file=new File(FilePath.PATH+"/test.txt");
		//path方法.获得路径，get(根路径,文件名)
		//get内部实际上调用了FileSystems.getDefault().getPath(根路径,文件名)
		Path p1=Paths.get(FilePath.PATH,"test.txt");
		System.out.println(p1);//打印对象，相当于调用toString，返回路径
		System.out.println(file.getPath());//File对象 用getPath获得路径
		//file对象转为oath对象
		Path p2=file.toPath();
		System.out.println(p2);
		
		Path p3=FileSystems.getDefault().getPath(FilePath.PATH,"test3.txt");//等同于上面的p1
		System.out.println(p3);
		
		//Path 对象的操作方法
		String info="新io的files工具类操作真方便!";
		try
		{   /*
			 写入操作
			 使用示例 ：默认情况下，该方法将创建一个新文件或覆盖现有文件。 假设您想要将字节追加到现有文件中：
			 Path path = ...
			 byte[] bytes = ...
			 Files.write(path, bytes, StandardOpenOption.APPEND); 
			 参数
			 path - 文件的路径
			 bytes - 具有要写入的字节的字节数组
			 options - 指定文件打开方式的选项
		    */
			Files.write(p1, info.getBytes());//默认是覆盖模式 getBytes(编码格式，不写默认系统)
			//读取文件 
			byte[] bytes=Files.readAllBytes(p1);//参数只有一个path对象(很多种的读取方法)
			System.out.println(new String(bytes));
			/*
			  复制文件
			 使用示例 ：假设我们要捕获网页并将其保存到文件中：

			 Path path = ...
			 URI u = URI.create("http://java.sun.com/");
			 try (InputStream in = u.toURL().openStream()) {
			 Files.copy(in, path);
			 } 
			 参数
			 in - 要读取的输入流/或者path对象
			 target - 文件的路径
			 options - 指定应如何完成副本的选项StandardCopyOption.下面的几个常量
			        ATOMIC_MOVE
			        将文件作为原子文件系统操作移动。
			        COPY_ATTRIBUTES
			        将属性复制到新文件。
			        REPLACE_EXISTING 常用
			        替换现有文件（如果存在）。
			 结果
			 读取或写入的字节数
			*/
			Files.copy(p1,Paths.get(FilePath.PATH,"test3.txt"));//添加REPLACE_EXISTING报错，默认文件存在的话不覆盖
			//截切用法同复制
			//Files.move(p1,Paths.get(FilePath.PATH,"test3.txt"));
			//删除文件
			Files.delete(p3);//直接传入删除的path对象,文件不存在会抛异常
			Files.deleteIfExists(p3);//通常用这种，只有文件存在才删除，不会出现异常
			
		}
		catch (IOException e)
		{}

		
		
	}
}
